package offer;

/**
 * @author ZhanBo
 * @date 2020/5/25
 */
public class Solution27 {

    public static void main(String[] args) {
        TreeNode treeNode = new TreeNode();
        TreeNode node = treeNode.stringToTreeNode("[4,2,7,1,3,6,9]");
        TreeNode node1 = mirrorTree(node);
        System.out.println(treeNode.treeNodeToString(node));
        System.out.println(treeNode.treeNodeToString(node1));
    }
    /**
     * 请完成一个函数，输入一个二叉树，该函数输出它的镜像。
     *
     * 输入：root = [4,2,7,1,3,6,9]
     * 输出：[4,7,2,9,6,3,1]例如输入：
     *      4
     *    /   \
     *   2     7
     *  / \   / \
     * 1   3 6   9
     * 镜像输出：
     *      4
     *    /   \
     *   7     2
     *  / \   / \
     * 9   6 3   1
     *
     * 限制：0 <= 节点个数 <= 1000
     *递归法
     * 解题思路
     * 根据二叉树镜像的定义，考虑递归遍历（dfs）二叉树，交换每个节点的左 / 右子节点，即可生成二叉树的镜像。
     *
     * 终止条件： 当节点 rootroot 为空时（即越过叶节点），则返回 nullnull ；
     * 递推工作：
     * 初始化节点 tmptmp ，用于暂存 rootroot 的左子节点；
     * 开启递归 右子节点 mirrorTree(root.right)mirrorTree(root.right) ，并将返回值作为 rootroot 的 左子节点 。
     * 开启递归 左子节点 mirrorTree(tmp)mirrorTree(tmp) ，并将返回值作为 rootroot 的 右子节点 。
     * 返回值： 返回当前节点 rootroot ；
     *
     * @param root
     * @return
     */
    public static TreeNode mirrorTree(TreeNode root) {
        if(root == null) {
            return null;
        }
        TreeNode tmp = root.left;
        root.left = mirrorTree(root.right);
        root.right = mirrorTree(tmp);
        return root;
    }


}
